
#ifndef UTILS_TUPLE_H
#define UTILS_TUPLE_H

#if defined(UTILS_ALL_BOOST_TR1)
#if !defined(UTILS_TUPLE_BOOST_TR1) \
    && !defined(UTILS_TUPLE_BOOST) \
    && !defined(UTILS_TUPLE_STANDARD) 
#define UTILS_TUPLE_BOOST_TR1
#endif
#elif defined(UTILS_ALL_BOOST)
#if !defined(UTILS_TUPLE_BOOST_TR1) \
    && !defined(UTILS_TUPLE_BOOST) \
    && !defined(UTILS_TUPLE_STANDARD) 
#define UTILS_TUPLE_BOOST
#endif
#elif defined(UTILS_ALL_STANDARD)
#if !defined(UTILS_TUPLE_BOOST_TR1) \
    && !defined(UTILS_TUPLE_BOOST) \
    && !defined(UTILS_TUPLE_STANDARD) 
#define UTILS_TUPLE_STANDARD
#endif
#else
#if !defined(UTILS_TUPLE_BOOST_TR1) \
    && !defined(UTILS_TUPLE_BOOST) \
    && !defined(UTILS_TUPLE_STANDARD) 
#define UTILS_TUPLE_STANDARD_TR1
#endif
#endif

#if defined(UTILS_TUPLE_BOOST_TR1)
#include <boost/tr1/tuple.hpp>
namespace utils {
  using std::tr1::tuple;
  using std::tr1::ignore;
  using std::tr1::make_tuple;
  using std::tr1::tie;
  using std::tr1::get;
  using std::tr1::tuple_size;
  using std::tr1::tuple_element;
}
#elif defined(UTILS_TUPLE_BOOST)
#include <boost/fusion/include/tuple.hpp>
#include <boost/fusion/include/std_pair.hpp>
namespace utils {
  using ::boost::fusion::tuple;
  using ::boost::fusion::ignore;
  using ::boost::fusion::make_tuple;
  using ::boost::fusion::tie;
  using ::boost::fusion::get;
  using ::boost::fusion::tuple_size;
  using ::boost::fusion::tuple_element;
}
#elif defined(UTILS_TUPLE_STANDARD)
#include <tuple>
namespace utils {
  using std::tuple;
  using std::ignore;
  using std::make_tuple;
  using std::tie;
  using std::get;
  using std::tuple_size;
  using std::tuple_element;
}
#elif defined(UTILS_TUPLE_STANDARD_TR1)
#include <tr1/tuple>
namespace utils {
  using std::tr1::tuple;
  using std::tr1::ignore;
  using std::tr1::make_tuple;
  using std::tr1::tie;
  using std::tr1::get;
  using std::tr1::tuple_size;
  using std::tr1::tuple_element;
}
#endif

#endif // UTILS_TUPLE_H

